// class User{
//   show(){}
//   get(){
//     console.log("get method")
//   }
// }
// const hd=new User()
// hd.get();

// class User{
//   constructor(name){
//     this.name=name;
//     this.show=function(){}
//   }
//   getName(){
//     return this.name;
//   }
// }

// // const xj=new User("向军大叔")
// // console.log(xj)


// class User {
//   site = "后盾人";
//   constructor(name) {
//     this.name = name;
//   }
//   show() {
//     console.log(this.site + ":" + this.name);
//   }
// }
// let hd = new User("向军");
// hd.show();
// console.log(Object.getOwnPropertyNames(User.prototype))

// class User{
//   constructor(name){
//     this.name=name;
//   }
//   show(){
//     console.log(this.name);
//   }
// }
// let xj=new User("向军")

// for(const key in xj){
//   console.log(key)
// }

// function Hd(name) {
//   this.name = name;
// }
// Hd.prototype.show = function() {
//   console.log(this.name);
// };
// let obj = new Hd("后盾人");
// for (const key in obj) {
//   console.log(key);
// }


// class Request{
//   static HOST="heep";

//   query(api){
//     return Rethisquest.HOST + "/" +api
//   }
// }

// let request=new Request();

// console.log(request.query("11"))


// class User{
//   constructor(name){
//     this.name=name;
//   }
//   static create(name){
//     return new User(name)
//   }
// }
// const xj=User.create("大叔好")
// console.log(xj.name)

// const data = [
//   { name: "js", price: 100 },
//   { name: "mysql", price: 212 },
//   { name: "vue.js", price: 98 }
// ];
// class Lesson {
//   constructor(data) {
//     this.model = data;
//   }
//   get price() {
//     return this.model.price;
//   }
//   get name() {
//     return this.model.name;
//   }
//   //批量生成对象
//   static createBatch(data) {
//     return data.map(item => new Lesson(item));
//   }
//   //最贵的课程
//   static MaxPrice(collection) {
//     return collection.sort((a, b) => b.price - a.price)[0];
//   }
// }
// const lessons = Lesson.createBatch(data);
// console.log(lessons);
// console.log(Lesson.MaxPrice(lessons).name);

// class User{
//   constructor(name){
//      this.data={name}
//   }
//   get name(){
//     return this.data.name;
//   }
//   set name(value){
//     if(value.trim()=="") throw new Error("invalid params")
//     this.data.name=value
//   }
// }

// let hd=new User("向军大叔")
// hd.name=""

// console.log(hd.name)

// class User {
//   url = "houdunren.com";
//   constructor(name) {
//     this.name = name;
//   }
// }
// let hd = new User("后盾人");
// console.log(hd.name, hd.url);

// class Common{
//   _host="https://houdunren.com"
//   set host(url){
//     if(!/^https:\/\//i.test(url)){
//       throw new Error("网址错误")
//     }
//     this._host=url;
//   }
// }

// class Article extends Common{
//   lists(){
//     return `${this._host}/article`
//   }
// }

// let article=new Article();
// console.log(article.lists())
// article.host="https://wqweqweqwe"

// console.log(article.lists())


// const protecteds = Symbol();
// class Common {
//   constructor() {
//     this[protecteds] = {};
//     this[protecteds].host = "https://houdunren.com";
//   }
//   set host(url) {
//     if (!/^https?:/i.test(url)) {
//       throw new Error("非常网址");
//     }
//     this[protecteds].host = url;
//   }
//   get host() {
//     return this[protecteds].host;
//   }
// }
// class User extends Common {
//   constructor(name) {
//     super();
//     this[protecteds].name = name;
//   }
//   get name() {
//     return this[protecteds].name;
//   }
// }
// let hd = new User("后盾人");
// hd.host = "https://www.hdcms.com";
// // console.log(hd[Symbol()]);
// console.log(hd.constructor);

// const _host=new WeakMap();
// class Common{
//   constructor(){
//     _host.set(this,"https://houdunren.com")
//   }
//   set host(url){
//     if (!/^https:\/\//i.test(url)) {
//       throw new Error("网址错误");
//     }
//     _host.set(this,url)
//   }
// }

// class Article extends Common{
//   constructor(){
//     super();
//   }
//   lists(){
//     return `${_host.get(this)}/article`
//   }

// }

// let article = new Article();
// console.log(article.lists()); //https://houdunren.com/article
// article.host = "https://hdcms.com";
// console.log(article.lists()); //https://hdcms.com/article

// const protecteds = Symbol("protected");
// class User {
//   constructor(name) {
//     this[protecteds] = { name };
//   }
//   get name() {
//     return this[protecteds].name;
//   }
//   set name(value) {
//     if (value.trim() == "") throw new Error("invalid params");
//     this[protecteds].name = value;
//   }
// }
// let hd = new User("向军大叔");
// hd.name = "后盾人";
// console.log(hd.name);
// console.log(Object.keys(hd));

// const protecteds = Symbol("protected");
// class User {
//   constructor(name) {
//     this[protecteds] = { name };
//   }
//   get name() {
//     return this[protecteds].name;
//   }
//   set name(value) {
//     if (value.trim() == "") throw new Error("invalid params");
//     this[protecteds].name = value;
//   }
// }
// let hd = new User("向军大叔");
// // hd.name = "后盾人";
// console.log(hd.name);
// console.log(Object.keys(hd));

// class User {
//   constructor(name) {
//     this.name = name;
//   }
// }
// class Admin extends User {
//   constructor(name) {
//     super(name);
//   }
// }
// let hd = new Admin("后盾人");
// console.log(hd);

// class User {
//   show() {
//     console.log("user.show");
//   }
// }
// class Admin extends User {
//   info() {
//     this.show();
//   }
// }
// let hd = new Admin();
// console.dir(hd.info());

// class Person {
//   constructor(name) {
//     this.name = name;
//   }
//   show() {
//     return `后盾人会员: ${this.name}`;
//   }
// }
// class User extends Person {
//   constructor(name) {
//     super(name);
//   }
//   run() {
//     return this.show();
//   }
// }
// const xj = new User("向军");
// console.dir(xj.run());

// let user = {
//   name: "user",
//   show() {
//     return this.name;
//   }
// };
// let admin = {
//   __proto__: user,
//   name: "admin",
//   show() {
//     return this.__proto__.show.call(this);
//   }
// };
// console.log(admin.show());


// let common = {
//   show() {
//     console.log("common.init");
//   }
// };
// let user = {
//   __proto__: common,
//   name: "user",
//   show() {
//     return this.__proto__.show.call(this);
//   }
// };
// let admin = {
//   __proto__: user,
//   name: "admin",
//   get() {
//     return this.__proto__.show.call(this);
//   }
// };
// console.log(admin.get());



// class User {
//   constructor(name) {
//     this.name = name;
//   }
//   getName() {
//     return this.name;
//   }
// }
// class Admin extends User {
//   constructor(name) {
//     super(name);
//   }
// }
// const hd = new Admin("后盾人");
// console.log(hd.getName());


// class Controller{
//   sum(){
//     return this.data.reduce((t,c)=>t+c.price,0)
//   }
// }

// class Lesson extends Controller{
//   constructor(lessons){
//     super()
//     this.data=lessons
//   }
//   info(){
//     return{
//       totalPrice:this.sum(),
//       data:this.data
//     }
//   }
// }

// let data = [
//   { name: "js", price: 100 },
//   { name: "mysql", price: 212 },
//   { name: "vue.js", price: 98 }
// ];

// const hd = new Lesson(data);
// console.log(hd.info().totalPrice);


// class User {
//   static site = "后盾人";
//   static host() {
//     return "houdunren.com";
//   }
// }
// class Admin extends User {}

// let ad=new Admin();
// console.log(Admin.host());

// function User() {}
// function Admin() {}
// Admin.prototype = Object.create(User.prototype);
// let hd = new Admin();
// console.log(hd instanceof Admin); //true
// console.log(hd instanceof User); //true

// console.log(hd.__proto__ == Admin.prototype);
// console.log(hd.__proto__.__proto__ == User.prototype);

// function Arr(...args) {
//   args.forEach(item => this.push(item));
//   this.first = function() {
//     return this[0];
//   };
//   this.max = function() {
//     console.log("*****")
//     console.log(this.data)
//     // return this.data.sort((a, b) => b - a)[0];
//   };
// }
// let a = [1, 23];
// Arr.prototype = Object.create(Array.prototype);
// let arr = new Arr(1, 2, 3);
// console.log(arr.max());


// class NewArr extends Array{
//   constructor(...args){
//     super(...args)
//   }
//   first(){
//     return this[0]
//   }
//   add(value){
//     this.push(value)
//   }
//   remove(value){
//     let pos=this.findIndex(curValue=>{
//       return curValue==value
//     })
//     this.splice(pos,1)
//   }
// }
// let hd=new NewArr(5,3,2,1)
// console.log(hd.length)

// const Tool={
//   max(key){
//     return this.data.sort((a, b) => b[key] - a[key])[0];
//   }
// }

// class Lesson {
//   constructor(lessons) {
//     this.lessons = lessons;
//   }
//   get data() {
//     return this.lessons;
//   }
// }

// Object.assign(Lesson.prototype, Tool);
// const data = [
//   { name: "js", price: 100 },
//   { name: "mysql", price: 212 },
//   { name: "vue.js", price: 98 }
// ];
// let hd = new Lesson(data);
// console.log(hd.max("price"));



